package com.cleaningcloud.cld.mapper;

import com.cleaningcloud.cld.api.domain.CldStaff;
import com.cleaningcloud.cld.domain.vo.CldStaffVo;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;
import java.util.Map;

/**
 * 人员花名册Mapper接口
 *
 * @author cleaningcloud
 * @date 2024-10-12
 */
public interface CldStaffMapper {

    /**
     * @Author Shaw
     * @Description 获取员工信息
     * @date: 2025-05-28 15:55
     * @param: //TODO
     */
    List<CldStaffVo> getStaffList(CldStaff cldStaff);

    /**
     * 查询人员花名册
     *
     * @param staffId 人员花名册主键
     * @return 人员花名册
     */
    CldStaffVo selectCldStaffByStaffId(Long staffId);

    /**
     * 查询人员花名册列表
     *
     * @param cldStaff 人员花名册
     * @return 人员花名册集合
     */
    List<CldStaffVo> selectCldStaffList(CldStaff cldStaff);


    /**
     * 员工统计
     *
     * @return
     */
    Map<String, Object> selectCldStaffAnalyze();


    List<CldStaff> selectCldStaffListByStaffIds(@Param("staffIds") List<Long> staffIds);

    /**
     * 新增人员花名册
     *
     * @param cldStaff 人员花名册
     * @return 结果
     */
    int insertCldStaff(CldStaff cldStaff);

    /**
     * 修改人员花名册
     *
     * @param cldStaff 人员花名册
     * @return 结果
     */
    int updateCldStaff(CldStaff cldStaff);

    /**
     * 删除人员花名册
     *
     * @param staffId 人员花名册主键
     * @return 结果
     */
    int deleteCldStaffByStaffId(Long staffId);

    /**
     * 批量删除人员花名册
     *
     * @param staffIds 需要删除的数据主键集合
     * @return 结果
     */
    int deleteCldStaffByStaffIds(Long[] staffIds);


    /**
     * 根据手机号查询
     *
     * @param staffPhone
     * @return
     */
    CldStaff selectStaffByStaffPhone(String staffPhone);


    /**
     * 校验手机号码是否唯一
     *
     * @param phonenumber 手机号码
     * @return 结果
     */
    CldStaff checkPhoneUnique(String phonenumber);


    /**
     * 校验身份证是否唯一
     *
     * @param idCard 身份证
     * @return 结果
     */
    CldStaff checkIdCardUnique(String idCard);

    /**
     * 根据员工id修改保险id
     *
     * @param insuranceId
     * @param staffId
     * @return
     */
    @Update("update cld_staff set insurance_id = #{insuranceId} where staff_id = #{staffId}")
    int updateInsuranceIdByStaffId(@Param("insuranceId") Long insuranceId, @Param("staffId") Long staffId);


    @Select("select count(1) from cld_staff")
    int selectStaffCount();


    @Update("update cld_staff set staff_status = 1,employment_time = sysdate(),resign_time = null,resign_app_time = null,resign_reason = null,resign_table_img = null,resign_approval_id = null,resign_approval_status = null,resign_approval_time = null,resign_approval_reason = null,register_project_id = null where staff_id = #{staffId}")
    int clearResignInfo(@Param("staffId") Long staffId);

    /**
     * 批量修改员工状态
     * @param list
     */
    void batchUpdateStaffStatus(@Param("list") List<Long> list);
}
